//package cn.seaboot.admin;
//
//import cn.seaboot.commons.core.FastJsonUtils;
//import cn.seaboot.commons.exception.SystemError;
//import org.apache.velocity.Template;
//import org.apache.velocity.VelocityContext;
//import org.apache.velocity.app.VelocityEngine;
//import org.apache.velocity.runtime.RuntimeConstants;
//import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
//import org.apache.velocity.runtime.resource.util.StringResourceRepository;
//
//import java.io.StringWriter;
//import java.util.Map;
//
///**
// * 模版引擎工具
// *
// * @author Mr.css
// * @version 2024-05-09 16:50
// */
//public class HelloVelocity {
//    private static final VelocityEngine ve = new VelocityEngine();
//
//    private HelloVelocity() {
//    }
//
//    /**
//     * 初始化配置
//     */
//    static {
//        try {
//            ve.setProperty(RuntimeConstants.RESOURCE_LOADERS, "string");
//            ve.setProperty("resource.loader.string.class", StringResourceLoader.class.getName());
//            ve.setProperty("resource.loader.string.cache", true);
//            ve.setProperty("resource.loader.string.modification_check_interval", 60);
//            ve.init();
//        } catch (Exception e) {
//            throw new SystemError("Velocity config error: ", e);
//        }
//    }
//
//    /**
//     * 渲染模版
//     *
//     * @param tpl   字符串模版
//     * @param model 模型，仅限于对象和 Map
//     */
//    public static String evaluate(String tpl, Object model) {
//        Map<String, Object> map = FastJsonUtils.toJSONObject(model);
//        VelocityContext ctx = new VelocityContext(map);
//        StringWriter sw = new StringWriter();
//        ve.evaluate(ctx, sw, "default", tpl);
//        return sw.toString();
//    }
//
//    /**
//     * 渲染模版
//     *
//     * @param tpl   字符串模版
//     * @param model 模型，仅限于对象和 Map
//     */
//    public static String evaluate(String tpl, Map<String, Object> model) {
//        VelocityContext ctx = new VelocityContext(model);
//        StringWriter sw = new StringWriter();
//        ve.evaluate(ctx, sw, "default", tpl);
//        return sw.toString();
//    }
//
//
//
//    /**
//     * 添加缓存到仓库
//     *
//     * @param key key
//     * @param tpl tpl
//     */
//    public static void putStringResource(String key, String tpl) {
//        StringResourceRepository repository = StringResourceLoader.getRepository();
//        repository.putStringResource(key, tpl);
//    }
//
//    /**
//     * 渲染模版
//     *
//     * @param key   字符串模版
//     * @param model 模型，仅限于对象和 Map
//     */
//    public static String process(String key, Object model) {
//        Template t = ve.getTemplate(key);
//        Map<String, Object> map = FastJsonUtils.toJSONObject(model);
//        VelocityContext ctx = new VelocityContext(map);
//        StringWriter sw = new StringWriter();
//        t.merge(ctx, sw);
//        return sw.toString();
//    }
//
//    /**
//     * 渲染模版
//     *
//     * @param key   字符串模版
//     * @param model 模型，仅限于对象和 Map
//     */
//    public static String process(String key, Map<String, Object> model) {
//        Template t = ve.getTemplate(key);
//        VelocityContext ctx = new VelocityContext(model);
//        StringWriter sw = new StringWriter();
//        t.merge(ctx, sw);
//        return sw.toString();
//    }
//
//
//    /**
//     * 获取模版
//     *
//     * @param tpl 字符串模版
//     */
//    public static Template getTemplate(String tpl) {
//        return ve.getTemplate(tpl);
//    }
//}
